package com.kylin.core.user.query.handler;

import com.kylin.dal.entity.user.UserWechatEntry;
import com.kylin.domain.user.vo.WechatUserInfoVO;
import com.kylin.shared.utils.MappingTools;
import com.kylin.user.api.dto.resp.UserInfoRespDTO;
import org.mapstruct.Mapper;

import java.util.Collections;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;

/**
 * 用户信息转换（防腐层）
 * @author Damon S.
 * @version v1.0.1
 * @date 2019年11月21日 15:24
 */
@Mapper(componentModel = "spring", uses = MappingTools.class)
public interface UserInfoTranslator {

    UserInfoRespDTO toUserInfoRespDTO(WechatUserInfoVO userInfo);

    /**
     * 转换一个用户数据项
     * @param entry 用户数据项
     * @return 返回用户对象
     */
    WechatUserInfoVO toWechatUserInfoVO(UserWechatEntry entry);

    /**
     * 批量转换用户数据，指定上级
     * @param entries 用户数据项
     * @return 返回用户对象集合
     */
    default List<WechatUserInfoVO> toUserInfoRespDTO(List<UserWechatEntry> entries) {
        return Optional.of(entries)
                .orElse(Collections.emptyList())
                .stream()
                .map(this::toWechatUserInfoVO)
                .collect(Collectors.toList());
    }
}
